Function
Function은 마치 여러분의 개인 비서 같아요. '이런 일이 있는데 좀 해줄래?' 하고 시키면, 그 비서가 딱 그 일만 처리해서 결과를 돌려주는 거죠.
HandStack Functions는 여러분의 백엔드를 마치 레고처럼 조립할 수 있게 해줘요. 필요한 기능만 따로 만들어서 붙일 수 있죠!
/api/users
https://infuser.odcloud.kr/api/stages/28493/api-docs
MyNodeUtil.js
execute
// server/src/functions/MyNodeUtil.js module.exports = { execute: async (payload, context) => { // payload: Function 호출 시 전달된 데이터 // context: 실행 컨텍스트 정보 (로그 등) console.log('MyNodeUtil Function 실행됨'); return { message: "Hello from Node.js Function!", input: payload }; } };
Client ↔︎ API Controller ↔︎ Function
HandStack은 API와 Function을 매끄럽게 연동할 수 있도록 설계되어, 복잡한 비즈니스 로직을 모듈화하고 재사용하기 용이합니다.
context.function.execute
MyNodeUtil
// C# API 컨트롤러 예시 [HttpPost("call-function")] public async Task<object> CallNodeFunction([FromBody] JsonObject payload) { // "MyNodeUtil" Function을 payload와 함께 실행 var result = await context.function.execute("MyNodeUtil", payload); return result; }
POST /api/[컨트롤러명]/call-function
PriceChecker
상품 가격을 받아 특정 금액 이상이면 메시지를 로깅하는 Function을 만듭니다.
Step 1: Function 생성
handstack generate function PriceChecker
Step 2: 로직 구현 (PriceChecker.js)
PriceChecker.js
module.exports = { execute: async (payload, context) => { const price = payload.price || 0; if (price >= 1000) { context.log.info(`[PriceChecker] 고가 상품 감지: ${price}원`); return { isExpensive: true }; } return { isExpensive: false }; } };
POST /api/products
// ProductsController.cs 의사 코드 [HttpPost] public async Task<object> CreateProduct([FromBody] Product product) { // 1. PriceChecker Function 호출하여 가격 검사 var checkPayload = new JsonObject { ["price"] = product.Price }; await context.function.execute("PriceChecker", checkPayload); // 2. 기존 상품 저장 로직 실행 // ... repository.execute("saveProduct", product) ... return new { message = "상품이 생성되었습니다." }; }
handstack generate function
이제 API의 핵심 로직을 Function으로 분리하고, API가 그 Function을 호출하는 형태로 만들 수 있게 되었어요. 이렇게 하면 코드가 더 깔끔하고 관리하기 쉬워집니다.